https://leetcode.cn/problems/decode-ways/description/
//class Solution {
//public:
//    int numDecodings(string s) {
//
//        int n = s.size();
//        vector<int> dp(n + 1);
//
//        dp[0] = 1;
//        dp[1] = (s[0] != '0');
//
//        for (int i = 2; i <= n; i++) {
//            if (s[i - 1] != '0') {
//                dp[i] += dp[i - 1];
//            }
//            int x = (s[i - 2] - '0') * 10 + (s[i - 1] - '0');
//            if (x >= 10 && x <= 26) {
//                dp[i] += dp[i - 2];
//            }
//        }
//        return dp[n];
//    }
//};

https://leetcode.cn/problems/GzCJIP/description/
//class Solution {
//public:
//    int minCostClimbingStairs(vector<int>& cost) {
//        int n = cost.size();
//        vector<int> dp(n);
//        dp[n - 1] = cost[n - 1], dp[n - 2] = cost[n - 2];
//
//        for (int i = n - 3; i >= 0; i--) {
//            dp[i] = cost[i] + min(dp[i + 1], dp[i + 2]);
//        }
//
//        return min(dp[0], dp[1]);
//    }
//};


https://leetcode.cn/problems/three-steps-problem-lcci/description/
//class Solution {
//public:
//    int waysToStep(int n) {
//        const int MOD = 1e9 + 7;
//        if (n <= 2) {
//            return n;
//        }
//        if (n == 3) {
//            return 4;
//        }
//
//        int n1 = 1;
//        int n2 = 2;
//        int n3 = 4;
//        for (int i = 4; i <= n; i++) {
//            int n4 = ((n1 + n2) % MOD + n3) % MOD;
//            n1 = n2;
//            n2 = n3;
//            n3 = n4;
//        }
//        return n3;
//    }
//};

https://leetcode.cn/problems/n-th-tribonacci-number/description/
//class Solution {
//public:
//    int tribonacci(int n) {
//
//        if (n <= 0) return 0;
//        if (n <= 2) return 1;
//        int n0 = 0;
//        int n1 = 1;
//        int n2 = 1;
//        int n3 = 0;
//
//        for (int i = 3; i <= n; i++) {
//            n3 = n0 + n1 + n2;
//            n0 = n1;
//            n1 = n2;
//            n2 = n3;
//        }
//        return n3;
//    }
//};